package dbx

import (
	"context"
	"fmt"

	"github.com/go-redis/redis/v8"
	"zhonghui/console/warehouse/cfgx"
	"zhonghui/console/warehouse/logx"
)

const (
	RedisMain = "main"
)

// NewRedis 初始化redis
func NewRedis(name string) *redis.Client {
	c := cfgx.Cfg().GetStringMapString("database.redis." + name)
	rc := redis.NewClient(&redis.Options{
		Addr:     fmt.Sprintf("%s:%s", c["host"], c["port"]),
		Password: c["password"],
		DB:       0,
	})

	if err := rc.Ping(context.Background()).Err(); err != nil {
		panic(err)
	}

	logx.Zap().Infow("Redis init succeed", "host", c["host"])

	return rc
}

// 根据之前redis每个服务都有一个特定prefix的需求，这里实现了一个函数
// 避免之前重复封装原生的redis操作的方式
// 在main中SetRedisPrefix("prefix")
// 之后每次使用RedisPrefix("key")

var redisServicePrefix string

func SetRedisPrefix(p string) {
	redisServicePrefix = p
}

func RedisPrefix(key string) string {
	if redisServicePrefix == "" {
		return key
	}

	return redisServicePrefix + ":" + key
}
